package cin.ufpe.br.projetoESS.Inicializacao;

import java.sql.SQLException;

import cin.ufpe.br.projetoESS.Dados.ConexaoBD;
import cin.ufpe.br.projetoESS.Dados.RepositorioAnunciante;
import cin.ufpe.br.projetoESS.Dados.RepositorioAssinante;
import cin.ufpe.br.projetoESS.Dados.RepositorioClassificado;
import cin.ufpe.br.projetoESS.Dados.RepositorioDistribuidora;
import cin.ufpe.br.projetoESS.Dados.RepositorioDocumento;
import cin.ufpe.br.projetoESS.Dados.RepositorioFolhaPagamento;
import cin.ufpe.br.projetoESS.Dados.RepositorioFuncionario;
import cin.ufpe.br.projetoESS.Dados.RepositorioPontoVenda;
import cin.ufpe.br.projetoESS.Dados.RepositorioServico;
import cin.ufpe.br.projetoESS.Dados.Relatorios.RepositorioRelatorioAssinante;
import cin.ufpe.br.projetoESS.Dados.Relatorios.RepositorioRelatorioFinanceiro;
import cin.ufpe.br.projetoESS.Dados.Relatorios.RepositorioRelatorioPublicidadePropaganda;
import cin.ufpe.br.projetoESS.Dados.Relatorios.RepositorioRelatorioQtdAlocacao;
import cin.ufpe.br.projetoESS.Fachada.Fachada;
import cin.ufpe.br.projetoESS.GUI.loginUI.Login;
import cin.ufpe.br.projetoESS.Negocio.ControleCadastro;
import cin.ufpe.br.projetoESS.Negocio.ControleGeracaoDocumento;
import cin.ufpe.br.projetoESS.Negocio.ControleGeracaoFolhaPagamento;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioAssinante;
import cin.ufpe.br.projetoESS.Negocio.ControleLogin;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioFinanceiro;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioPublicidadePropaganda;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioQtdAlocacao;

public class Inicializacao {
	
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		ConexaoBD conexao = new ConexaoBD();
		conexao.conectarBD();
		
		RepositorioFuncionario repFuncionario = new RepositorioFuncionario(conexao.getConn());
		RepositorioAnunciante repAnunciante = new RepositorioAnunciante(conexao.getConn());
		RepositorioClassificado repClassificado = new RepositorioClassificado(conexao.getConn());
		RepositorioDistribuidora repDistribuidora = new RepositorioDistribuidora(conexao.getConn());
		RepositorioFolhaPagamento repFolhaPagamento = new RepositorioFolhaPagamento(conexao.getConn(), repFuncionario);
		RepositorioPontoVenda repPontoVenda = new RepositorioPontoVenda(conexao.getConn());
		RepositorioServico repServico = new RepositorioServico(conexao.getConn());
		RepositorioAssinante repAssinante = new RepositorioAssinante(conexao.getConn());
		RepositorioDocumento repositorioDocumento= new RepositorioDocumento(conexao.getConn());
		RepositorioRelatorioPublicidadePropaganda repositorioRelatorioPublicidade = new RepositorioRelatorioPublicidadePropaganda(conexao.getConn());
		RepositorioRelatorioFinanceiro repositorioRelatorioFinanceiro = new RepositorioRelatorioFinanceiro(conexao.getConn());
		RepositorioRelatorioAssinante repositorioRelatorioAssinante = new RepositorioRelatorioAssinante (conexao.getConn());
		RepositorioRelatorioQtdAlocacao repositorioRelatorioQtdAlocacao = new RepositorioRelatorioQtdAlocacao (conexao.getConn());
		
		ControleLogin controleLogin = new ControleLogin (repFuncionario);
		
		ControleCadastro controleCadastro = new ControleCadastro ( 	repFuncionario,
																	repFolhaPagamento,
																	repServico,
																	repAnunciante,
																	repClassificado,
																	repPontoVenda,
																	repDistribuidora,
																	repAssinante );
		
		ControleGeracaoFolhaPagamento controleRelFolhaPagamento = new ControleGeracaoFolhaPagamento(repFolhaPagamento);
		ControleGeracaoDocumento controleDocumento = new ControleGeracaoDocumento(repFuncionario, repFolhaPagamento, repositorioDocumento);
		ControleRelatorioPublicidadePropaganda controlePropagandaPublicidade =  new ControleRelatorioPublicidadePropaganda(repositorioRelatorioPublicidade,repAnunciante); 
		ControleRelatorioFinanceiro controleRelatorioFinanceiro = new ControleRelatorioFinanceiro(repositorioRelatorioFinanceiro, repAnunciante, repClassificado, repAssinante, repPontoVenda, repFolhaPagamento, repServico, repDistribuidora);
		ControleRelatorioAssinante controleRelatorioAssinante = new ControleRelatorioAssinante (repAssinante, repositorioRelatorioAssinante);
		ControleRelatorioQtdAlocacao controleRelatorioQtdAlocacao = new ControleRelatorioQtdAlocacao (repositorioRelatorioQtdAlocacao, repFuncionario);
		
		Fachada fachada = new Fachada (controleRelFolhaPagamento, controleCadastro, controleLogin,controleDocumento, controlePropagandaPublicidade, controleRelatorioFinanceiro, controleRelatorioAssinante, controleRelatorioQtdAlocacao);
		
		Login login = new Login(fachada);
		login.setVisible(true);
		
	}
}
